var Utils = require('geoUtils');
/**
 * 将fromNode节点上指定的组件的指定属性复制给其它节点。
 * 特别适用于批量处理组件配置情形。
 */
cc.Class({
    extends: cc.Component,
    properties: {
        fromNode: {
            default: null,
            type: cc.Node,
            tooltip: '作为获取资源的节点。留空则使用组件所在节点。'
        },
        toNode: {
            default: null,
            type: cc.Node,
            tooltip: '作为接受属性的组件所在的节点父节点。留空则使用该组件所在节点。'
        },
        componentName: {
            default: 'ComponentName',
            tooltip: '组件的类名。'
        },
        attrs: {
            default: [],
            type: [cc.String],
        },
        includeHierarchy:{
            default: true,
            tooltip: '是否考虑toNode的子孙。'
        },
        includeToNode:{
            default: false,
            tooltip:'是否考虑toNode节点本身。'
        },
        markName: {
            default: '',
            tooltip: '筛选子孙节点时需要的标记名，留空则处理所有子孙。'
        },
        markValue: {
            default: '',
            tooltip: '筛选子孙节点时需要的标记值，留空则仅使用markName筛选。'
        },
        addIfNotExist:{
            default: true,
            tooltip: '若筛选出的节点不含指定组件，则自动附加。'
        },
        imitateOnLoad: {
            default: true,
            tooltip: '是否加载场景时就执行配置操作'
        }
    },
    onLoad(){
        if (this.imitateOnLoad === true)
            this.doImitate();
    },

    doImitate() {
        Utils.node.imitateComponent(this.fromNode || this.node, this.componentName, this.attrs,
            this.toNode || this.node, this.includeHierarchy, this.includeToNode, 
            this.markName, this.markValue, this.addIfNotExist);
    }
})